import Vue from 'vue'

// 引入axios
import axios from 'axios'

// 导入路由模块
import router from '@/router/index.js'

// 引入json-bigint模块
import JSONbig from 'json-bigint'

// 配置后端服务器接口的公共根地址
axios.defaults.baseURL = 'http://ttapi.research.itcast.cn/mp/v1_0/'
// A：请求拦截器
axios.interceptors.request.use(function (config) {
  // 给axios配置token信息
  let userinfo = window.sessionStorage.getItem('userinfo')
  if (userinfo) {
    let token = JSON.parse(userinfo).token
    config.headers.Authorization = 'Bearer ' + token
  }
  return config
}, function (error) {
  return Promise.reject(error)
})

// B：响应拦截器
axios.interceptors.response.use(function (response) {
  // 成功请求回来的样子
  return response
}, function (error) {
  // 失败请求回来的样子（401在此）
  console.dir(error)
  if (error.response.status === 401) {
    // token失效，强制用户登录
    router.push('/login')
  }
  return Promise.reject(error)
})

// C：数据转换器(接受服务器端返回的第一手的字符串类型的响应数据)
axios.defaults.transformResponse = [function (data) {
  if (data) {
    return JSONbig.parse(data)
  } else {
    return data
  }
}]

// 把axios通过原型继承方式配置给Vue成员，名称为$http(自定义的)，以后可通过
// this.$http 的方法获得axios对象了
Vue.prototype.$http = axios
